Computer networks need to be constantly managed in order to ensure smooth and efficient operation. Such management typically includes ensuring robustness (i.e. the ability of the network to continue operating even if nodes fail), quality of service (QoS), scalability (i.e. the network must operate regardless of the number of nodes), etc.
Typically, network management is performed by humans or is, to a large extent, dependent on human input. This is undesirable, particularly, for example, in the case of a network having a large number of nodes because of the time it would take a human to identify and fix a failed node. It is therefore desirable that networks run themselves as much as possible.